package com.coderman.infosys.plat.auth.common.error;

/**
 * @author 2022-01-02
 * 统一错误处理接口
 * 从这里可以看出由于枚举类大多定义之后不会变化，当然有变化也需要慎重修改
 * 所以从枚举本身的定位看来我们可以认为这就是值对象，那么为什么让枚举实现一个IError接口呢，
 * 有两个目的
 * 1.在这里是因为很多模块都有错误码，抛异常的时候需要抽象封装
 * 2.很多模块的实现相当于是多实现,对于IError更像是一种值对象的协议
 * 在这里稍微扩展一些，就是有时候有些枚举的组合会有不同的逻辑，那这些枚举其实就是不同值对象的协议实现
 * 比如有三个配置，五个值对象属性a,b,c,d,e。存在以下N种场景
 * 1.根据a,c,e做查询操作
 * 2.只有在a=x,b=y的时候才能做c相关的逻辑
 * 3.如果存在d,e不为空的时候做abc的逻辑
 * ......
 * 那么常规的做法就是在业务service中做对应处理
 * 所以此时就可以做一个接口来实现这个值对象协议(类似于规格协议)
 * IXXXConfig(getA,getB,getC,getD,getE)
 * 那这样的话可以构建任意组合的值对象如QuerySomethinConfig
 * 或者MakeDealConfig
 * 由于值对象只有只读属性所以可以在new的时候通过构造方法来构建或者通过spring 注入配置或者内部写死值对象的值
 */
public interface IError {
    String getErrorCode();

    String getErrorMsg();
}
